package com.UnionPayCenter.distribution.manager;

import com.UnionPayCenter.distribution.domain.DistributionUser;
import com.UnionPayCenter.distribution.dto.PageQueryBaseDTO;
import com.UnionPayCenter.distribution.entity.UserDistributionDO;
import com.UnionPayCenter.distribution.entity.UserDistributionRefDO;
import com.UnionPayCenter.distribution.vo.DistributionUserRefVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @author Noah
 * @since 1.0.0, 2019/07/03
 */
public interface UserDistributionRefManager {

    /**
     * 初始化分销用户信息关系表
     *
     * @param user               请求信息
     * @param userDistributionDO 用户分销信息
     */
    void initUserDistributionRef(DistributionUser user, UserDistributionDO userDistributionDO);

    /**
     * 根据分销对手ID获取用户信息
     *
     * @param bId                商铺id
     * @param shopId             店铺ID
     * @param counterpartyUserId 对手ID
     * @return
     */
    UserDistributionRefDO selectByCounterpartyUser(Long bId, Long shopId, Long counterpartyUserId);

    /**
     * 根据userId获取记录条数
     *
     * @param bId    商铺ID
     * @param shopId 店铺ID
     * @param userId 用户ID
     * @param level 等级
     * @return
     */
    int countRecordFilterBlankMobileByUserId(Long bId, Long shopId, Long userId, Integer level);

    /**
     * 根据分销员ID获取用户信息
     *
     * @param bId    商铺id
     * @param shopId 店铺ID
     * @param userId 对手ID
     * @return
     */
    List<UserDistributionRefDO> listByUserId(Long bId, Long shopId, Long userId);

    /**
     * 根据分销员ID获取用户信息
     *
     * @param bId    商铺id
     * @param shopId 店铺ID
     * @param userId 对手ID
     * @return
     */
    Page<UserDistributionRefDO> pageSecondRecordFilterBlankMobileByUserId(Long bId, Long shopId, Long userId, PageQueryBaseDTO pageQueryBaseDTO);

    /**
     * 根据分销员ID获取用户信息
     *
     * @param bId    商铺id
     * @param shopId 店铺ID
     * @param userId 对手ID
     * @return
     */
    Page<UserDistributionRefDO> pageFirstRecordFilterBlankMobileByUserId(Long bId, Long shopId, Long userId, PageQueryBaseDTO pageQueryBaseDTO);

    /**
     * 根据分销员ID获取用户信息
     *
     * @param bId    商铺id
     * @param shopId 店铺ID
     * @param userId 对手ID
     * @return
     */
    Page<UserDistributionRefDO> pageAllRecordFilterBlankMobileByUserId(Long bId, Long shopId, Long userId, PageQueryBaseDTO pageQueryBaseDTO);

    /**
     * 根据userId获取所有记录条数
     *
     * @param bId    商铺ID
     * @param shopId 店铺ID
     * @param userId 用户ID
     * @param level  层级
     * @return
     */
    int countAllRecordByUserId(Long bId, Long shopId, Long userId, Integer level);


    /**
     * 根据userid获取下级用户信息
     *
     * @param bId    商铺ID
     * @param shopId 店铺ID
     * @param userId 用户ID
     * @return
     */
//    List<DistributionUserRefVO> listSubUserByUserId(Long bId, Long shopId, Long userId);


    /**
     * 分页获取用户信息
     *
     * @param refDO 条件信息
     * @return 分销流水列表
     */
    Page<UserDistributionRefDO> pageDistributionSn(UserDistributionRefDO refDO, Integer page, Integer pageSize);
}
